package com.yunke.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yunke.entity.YunkeRole;
import com.yunke.entity.vo.YunkeRoleVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 角色Mapper接口
 * 
 * @author yunke
 * @since 1.0.0
 */
@Mapper
public interface YunkeRoleMapper extends BaseMapper<YunkeRole> {

    /**
     * 根据角色编码查询角色
     */
    YunkeRole selectByRoleCode(@Param("roleCode") String roleCode);

    /**
     * 分页查询角色列表
     */
    IPage<YunkeRoleVo> selectRolePageVo(Page<YunkeRoleVo> page,
                                       @Param("roleCode") String roleCode,
                                       @Param("roleName") String roleName,
                                       @Param("enabled") Boolean enabled);

    /**
     * 根据ID查询角色详情
     */
    YunkeRoleVo selectRoleVoById(@Param("id") Long id);

    /**
     * 查询所有启用的角色
     */
    List<YunkeRoleVo> selectEnabledRoles();

    /**
     * 根据管理员ID查询角色列表
     */
    List<YunkeRole> selectByAdminId(@Param("adminId") Long adminId);

    /**
     * 查询角色权限列表
     */
    List<String> selectPermissionsByRoleId(@Param("roleId") Long roleId);

    /**
     * 查询角色菜单ID列表
     */
    List<Long> selectMenuIdsByRoleId(@Param("roleId") Long roleId);

    /**
     * 统计角色数量
     */
    Long countRoles(@Param("enabled") Boolean enabled);

    /**
     * 检查角色是否被使用
     */
    Long checkRoleInUse(@Param("roleId") Long roleId);

    /**
     * 批量更新启用状态
     */
    int batchUpdateEnabled(@Param("ids") List<Long> ids,
                          @Param("enabled") Boolean enabled,
                          @Param("updateTime") Long updateTime);

    /**
     * 根据级别查询角色
     */
    List<YunkeRole> selectByLevel(@Param("level") Integer level);
} 